package cn.edu360.biz.chain.handler;

import java.io.File;
import java.util.Date;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import cn.edu360.biz.chain.AbstractDataLogCollectChain;
import cn.edu360.biz.chain.constant.DataLogCollectConstant;
import cn.edu360.biz.chain.factory.DataLogCollectChainFactory;
import cn.edu360.common.util.DateUtil;
import cn.edu360.common.util.SnowflakeIdWorker;
import cn.edu360.hadoop.factory.HdfsFileSystemFactory;
import cn.edu360.hadoop.util.HdfsFileSystemUtil;

/**
 * 移动 日志数据至备份的 文件夹
 */

@Component
public class TempUploadHandler extends AbstractDataLogCollectChain {

	@Autowired
	private BackUpDataLogHandler backUpDataLogHandler;
	/**
	 * 实现HDFS文件上传
	 * 
	 * @param 待上传的文件路径
	 * @param 备份文件的路径
	 */
	public void dateLogHandlerChain(String src, String dest) {
		System.out.println("====== 日志上传处理 ======");
		// 上传至HDFS存储
		HdfsFileSystemFactory factory = HdfsFileSystemUtil.get();
		// 判断文件存放的位置 //时间的格式的文件名
		// 文件夹的名称
		String times = DateUtil.getDateTimes(new Date(), DateUtil.DATE_FORMATE_YMDHMS);
		String blkPath = times.substring(0, 13).replace(" ", "/");
		String hdfsDest = DataLogCollectConstant.LOG_HDFS__UPLOAD_LOCATION + blkPath;
		
		if (!factory.ifExist(hdfsDest))
			factory.mkDir(hdfsDest);
		// 实现上传文件
		File[] listFiles = new File(src).listFiles();
		for (File file : listFiles) {
			// 重新命名日志文件文件
			String destHdfs = hdfsDest + "/" + file.getName() + "." + SnowflakeIdWorker.getGenKey();
			factory.upload(file.getPath(), destHdfs);
		}
		
		// 设置日志本地备份处理
		setNextSuccessor(DataLogCollectChainFactory.createBackUpDataLogHandler());
		//备份处理
		successor.dateLogHandlerChain(src,DataLogCollectConstant.LOG_BACKUP__UPLOAD_LOCATION);
	}


}
